/*
 * twi.c
 *
 *  Created on: Aug 29, 2013
 *      Author: IEUser
 */


/******************************************************************************************
 *	Deklaracje dołączanych plików nagłówkowych i bibliotek								 *
 *****************************************************************************************/
#include "twi.h"

/******************************************************************************************
 *	Deklaracje zmiennych globalnych								                         *
 *****************************************************************************************/

/******************************************************************************************
 *	Deklaracje funkcji															 		 *
 *****************************************************************************************/
void twi_init(void){
	/* inicjalizacja zegara TWI: zegar 100 kHz, TWPS = 0 => prescaler = 1 */
	TWSR = 0;                         /* bez prescalera */
	TWBR = ((F_CPU/SCL_CLOCK)-16)/2;  /* musi być > 10 do prawidłowej pracy */
}

void twi_start(void){
	TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);

	while(!(TWCR & (1<<TWINT)));
}

void twi_stop(void){
	TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);

	while(TWCR & (1<<TWSTO));
}

void twi_write_byte(uint8_t byte){
	TWDR = byte;
	TWCR = (1<<TWINT) | (1<<TWEN);

	while(!(TWCR & (1<<TWINT)));
}

uint8_t twi_read_byte(uint8_t ack){
	if(ack)
		TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
	else
		TWCR = (1<<TWINT) | (1<<TWEN);

	while(!(TWCR & (1<<TWINT)));

	return TWDR;
}

/******************************************************************************************
 *	Koniec pliku twi.c
 *****************************************************************************************/
